﻿//using System;
//using System.Collections.Generic;
//using System.Text;
//using DCRF.Common.Core;
//using DCRF.Common.Primitive;
//using DCRF.Common.Helper;
//using System.Reflection;
//using DCRF.Common.DBC;
//using DCRF.Common.Interface;
//using DBML.Interface;
//using System.Windows.Forms;

//namespace DCRF.BaseBlocks
//{
//    public class TreeData : BlockBase
//    {
//        public override BlockInfo BlockInfo
//        {
//            get
//            {
//                BlockInfo result = new BlockInfo();
//                result.BlockID = new CID("TreeData", new BlockVersion(1, 0, 0, 0), "DCRF");
//                return result;
//            }
//        }

//        public override PlatformType Platform
//        {
//            get
//            {
//                return PlatformType.Windows;
//            }
//        }

//        private const string PRO_EntityName = "EntityName";
//        private const string PRO_DisplayAttribute = "DisplayAttribute";
//        private const string PRO_UseParentType = "UseParentType";
//        private const string PRO_ParentTypeAttribute = "ParentTypeAttribute";
//        private const string PRO_ParentTypeFilter = "ParentTypeFilter";

//        private const string CON_DataSourceGetRows = "DataSourceGetRows";
//        private const string CON_EntitySchemaGetFK = "EntitySchemaGetFK";
//        private const string CON_EntitySchemaGetPK = "EntitySchemaGetPK";

//        public override void InitProperties()
//        {
//            Properties.Add(PRO_EntityName,typeof(string));
//            Properties.Add(PRO_DisplayAttribute,typeof(string));
            
//            Properties.Add(PRO_UseParentType, typeof(bool));
//            Properties.Add(PRO_ParentTypeAttribute, typeof(string)); //fieldname for parentType
//            Properties.Add(PRO_ParentTypeFilter);  //does Block need to filter rows by parent type?
//        }

//        public override void InitConnectors()
//        {
//            Connectors.CreateConnector(CON_DataSourceGetRows);
//            Connectors.CreateConnector(CON_EntitySchemaGetFK);
//            Connectors.CreateConnector(CON_EntitySchemaGetPK);
//        }

//        [BlockService]
//        public void BindToUI(Control container)
//        {
//            TreeView tv = new TreeView();

//            addRows(null, null, tv);            

//            container.Controls.Add(tv);
//        }

//        private void addRows(object parentId,TreeNode parentNode, TreeView tv)
//        {
//            IRowCollection rows = getRowsByParent(parentId);
//            string pkField = processConnector<string>("EntitySchemaGetPK", this["EntityName"]);

//            for (int i = 0; i < rows.Count; i++)
//            {
//                IDataRow row = rows.GetItem(i) as IDataRow;

//                TreeNode tn = new TreeNode();
//                tn.Text = row.GetFieldValue(this["DisplayAttribute"]).ToString();
//                tn.Tag = row;

//                addRows(row.GetFieldValue(pkField), tn, tv);

//                if (parentNode == null)
//                {
//                    tv.Nodes.Add(tn);
//                }
//                else
//                {
//                    parentNode.Nodes.Add(tn);
//                }
//            }
//        }

//        IRowCollection getRowsByParent(object parentId)
//        {
//            string fkField = processConnector<string>("EntitySchemaGetFK", this["EntityName"], this["EntityName"]);
//            IRowCollection rows = null;

//            if ((bool)Properties[PRO_UseParentType])
//            {
//                rows = processConnector<IRowCollection>("DataSourceGetRows", this["EntityName"],
//                    fkField, parentId,
//                    this[PRO_ParentTypeAttribute], this[PRO_ParentTypeFilter]);
//            }
//            else
//            {
//                rows = processConnector<IRowCollection>("DataSourceGetRows", this["EntityName"],
//                    fkField, parentId);
//            }

//            return rows;
//        }
//    }
//}
